/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package imp.gestores;

import imp.DAO.*;
import imp.util.*;
import imp.clases.*;

import java.util.ArrayList;

import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import org.ajax4jsf.component.html.HtmlAjaxCommandButton;

import org.richfaces.component.html.HtmlDataTable;

/**
 *
 * @author Alvaro Uyaguari
 */
public class GestorRecursosHumanos extends BeanUtil{

    private Emprendimiento currentEmprendimiento;
    private Persona currentEmprendedor;
    private Experiencia currentExperiencia;
    private Estudio currentEstudio;
    private Habilidad currentHabilidad;
    private Cargo currentCargo;
    private Cargo currentCargoRelacion;

    private HtmlDataTable tablaEmprendedor;
    private HtmlDataTable tablaExperiencias;
    private HtmlDataTable tablaEstudios;
    private HtmlDataTable tablaHabilidad;
    private HtmlDataTable tablaCargo;

    private List<Persona> listadoActual;
    private List<Experiencia> listadoAExperiencia;
    private List<Estudio> listadoAEstudio;
    private List<Habilidad> listadoAHabilidad;
    private List<Cargo> listadoACargo;
   

    private String accionEmprendedor;
    private String accionExperiencia;
    private String accionEstudio;
    private String accionHabilidad;
    private String accionCargo;
    
    private Boolean renderEmprendedor;
    private Boolean renderExperiencia;
    private Boolean renderEstudio;
    private Boolean renderHabilidad;
    private Boolean renderCargo;

    private Boolean renderPnExperiencia;
    private Boolean renderPnEstudio;
    private Boolean renderPnHabilidad;
    private Boolean renderPnCargo;

    private String filtroBusqueda;
    private String accion;
    
    


    
    private DAO dao = (DAO)ServiceFinder.findBean("SpringHibernateDao");

    public GestorRecursosHumanos(){
        this.tablaEmprendedor=new HtmlDataTable();
        this.tablaCargo=new HtmlDataTable();
        currentCargoRelacion=new Cargo();
        this.listar();
        this.accion="Ins";
    }

     public void buscar(){

    }

      public String listar() {

        try {
                listadoActual = dao.find(Persona.class);

        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }
        return null;
    }
      public String listarExperiencia() {

        try {
                listadoAExperiencia = dao.find(Experiencia.class);

        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }
        return null;
    }
      public String listarEstudio() {

        try {
                listadoAEstudio = dao.find(Estudio.class);

        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }
        return null;
    }
        public String listarHabilidades() {

        try {
                listadoAHabilidad = dao.find(Habilidad.class);

        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }
        return null;
    }

    public String eliminar(){
                this.currentEmprendedor = (Persona) tablaEmprendedor.getRowData();

		try
		{
			//session.delete(currentOrden);
			//tx.commit();
                    dao.delete(currentEmprendedor);
		}
		catch (Throwable ex)
		{
			super.addErrorMessage(ex.getMessage());
			return null;
		}
		listar();

		return null;
	}
    public String editar()
	{
                this.accion="Mod";
		currentEmprendedor = (Persona)tablaEmprendedor.getRowData();
		return null;
	}
     public String nuevo() {
        try
        {
                   this.accion="Ins";
                   this.currentEmprendedor = new Persona();
                   
                   return null;

        }
        catch  (Throwable ex) {
                    super.addErrorMessage(ex.getMessage());
        }
                return null;
    }
      public String cerrar() {

                return null;
            }

       public String grabar() {

        try {

                //dao.flush();
                dao.persist(this.currentEmprendimiento);


        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }
        this.listar();
        refrescarGrafica();
        return null;
    }
       public String grabarEmprendedor(){
            if (this.accionEmprendedor.equals("Ins")){

                this.currentEmprendimiento.addPersona(currentEmprendedor);

          }
           this.renderEmprendedor=false;
           return null;

       }
       public String cerrarEmprendedor(){
           this.renderEmprendedor=false;
           return null;

       }
       public String eliminarEmprendedor(){
           currentEmprendedor = (Persona)tablaEmprendedor.getRowData();
           this.currentEmprendimiento.removePersona(currentEmprendedor);
           return null;
       }
       public String editarEmprendedor(){
            this.accionEmprendedor="Mod";
                this.renderEmprendedor=true;
		currentEmprendedor = (Persona)tablaEmprendedor.getRowData();
		return null;
       }
       public String nuevoEmprendedor(){
                this.accionEmprendedor="Ins";
                this.renderEmprendedor=true;
		currentEmprendedor = new Persona();
		return null;
       }


       public String grabarExperiencia(){
            if (this.accionExperiencia.equals("Ins")){

                this.currentEmprendedor.addExperiencia(currentExperiencia);

          }
           this.renderExperiencia=false;
           this.listarExperiencia();
           return null;

       }
       public String cerrarExperiencia(){
           this.renderExperiencia=false;
           return null;

       }
       public String eliminarExperiencia(){
           currentExperiencia = (Experiencia)tablaExperiencias.getRowData();
           this.currentEmprendedor.removeExperiencia(currentExperiencia);
           this.listarExperiencia();
           return null;
       }
       public String editarExperiencia(){
            this.accionExperiencia="Mod";
                this.renderExperiencia=true;
		currentExperiencia = (Experiencia)tablaExperiencias.getRowData();
		this.listarExperiencia();
                return null;
       }
       public String nuevoExperiencia(){
                this.accionExperiencia="Ins";
                this.renderExperiencia=true;
		currentExperiencia = new Experiencia();

		return null;
       }


       public String grabarEstudio(){
            if (this.accionEstudio.equals("Ins")){

                this.currentEmprendedor.addEstudio(currentEstudio);

          }
           this.renderEstudio=false;
           return null;

       }
       public String cerrarEstudio(){
           this.renderEstudio=false;
           return null;

       }
       public String eliminarEstudio(){
           currentEstudio = (Estudio)tablaEstudios.getRowData();
           this.currentEmprendedor.removeEstudio(currentEstudio);
           return null;
       }
       public String editarEstudio(){
            this.accionEstudio="Mod";
                this.renderEstudio=true;
		currentEstudio = (Estudio)tablaEstudios.getRowData();
		return null;
       }
       public String nuevoEstudio(){
                this.accionEstudio="Ins";
                this.renderEstudio=true;
		currentEstudio = new Estudio();
		return null;
       }


       public String grabarHabilidad(){
       if (this.accionHabilidad.equals("Ins")){

            this.currentEmprendedor.addHabilidad(currentHabilidad);

          }
           this.renderHabilidad=false;
           return null;

       }
       public String cerrarHabilidad(){
           this.renderHabilidad=false;
           return null;

       }
       public String eliminarHabilidad(){
           currentHabilidad = (Habilidad)tablaHabilidad.getRowData();
           this.currentEmprendedor.removeHabilidad(currentHabilidad);
           return null;
       }
       public String editarHabilidad(){
            this.accionHabilidad="Mod";
                this.renderHabilidad=true;
		currentHabilidad = (Habilidad)tablaHabilidad.getRowData();
		return null;
       }
       public String nuevoHabilidad(){
                this.accionHabilidad="Ins";
                this.renderHabilidad=true;
		currentHabilidad = new Habilidad();
		return null;
       }



    public String getAccion() {
        return accion;
    }

    public Persona getCurrentEmprendedor() {
        return currentEmprendedor;
    }

    public Emprendimiento getCurrentEmprendimiento() {
        return currentEmprendimiento;
    }

    public String getFiltroBusqueda() {
        return filtroBusqueda;
    }

    public List<Persona> getListadoActual() {
        return listadoActual;
    }

    public HtmlDataTable getTablaEmprendedor() {
        return tablaEmprendedor;
    }

    public void setAccion(String accion) {
        this.accion = accion;
    }

    public String getAccionEstudio() {
        return accionEstudio;
    }

    public void setAccionEstudio(String accionEstudio) {
        this.accionEstudio = accionEstudio;
    }

    public String getAccionExperiencia() {
        return accionExperiencia;
    }

    public void setAccionExperiencia(String accionExperiencia) {
        this.accionExperiencia = accionExperiencia;
    }

    public Estudio getCurrentEstudio() {
        return currentEstudio;
    }

    public void setCurrentEstudio(Estudio currentEstudio) {
        this.currentEstudio = currentEstudio;
    }

    public Experiencia getCurrentExperiencia() {
        return currentExperiencia;
    }

    public void setCurrentExperiencia(Experiencia currentExperiencia) {
        this.currentExperiencia = currentExperiencia;
    }

    

    public Boolean getRenderEstudio() {
        return renderEstudio;
    }

    public void setRenderEstudio(Boolean renderEstudio) {
        this.renderEstudio = renderEstudio;
    }

    public Boolean getRenderExperiencia() {
        return renderExperiencia;
    }

    public void setRenderExperiencia(Boolean renderExperiencia) {
        this.renderExperiencia = renderExperiencia;
    }

    public HtmlDataTable getTablaEstudios() {
        return tablaEstudios;
    }

    public void setTablaEstudios(HtmlDataTable tablaEstudios) {
        this.tablaEstudios = tablaEstudios;
    }

    public HtmlDataTable getTablaExperiencias() {
        return tablaExperiencias;
    }

    public void setTablaExperiencias(HtmlDataTable tablaExperiencias) {
        this.tablaExperiencias = tablaExperiencias;
    }

    public String getAccionHabilidad() {
        return accionHabilidad;
    }

    public void setAccionHabilidad(String accionHabilidad) {
        this.accionHabilidad = accionHabilidad;
    }

    public Habilidad getCurrentHabilidad() {
        return currentHabilidad;
    }

    public void setCurrentHabilidad(Habilidad currentHabilidad) {
        this.currentHabilidad = currentHabilidad;
    }

    public List<Habilidad> getListadoAHabilidad() {
        this.listarHabilidades();
        return listadoAHabilidad;
    }

    public void setListadoAHabilidad(List<Habilidad> listadoAHabilidad) {
        this.listadoAHabilidad = listadoAHabilidad;
    }

    public Boolean getRenderHabilidad() {
        return renderHabilidad;
    }

    public void setRenderHabilidad(Boolean renderHabilidad) {
        this.renderHabilidad = renderHabilidad;
    }

    public Boolean getRenderPnHabilidad() {
        return renderPnHabilidad;
    }

    public void setRenderPnHabilidad(Boolean renderPnHabilidad) {
        this.renderPnHabilidad = renderPnHabilidad;
    }

    public HtmlDataTable getTablaHabilidad() {
        return tablaHabilidad;
    }

    public void setTablaHabilidad(HtmlDataTable tablaHabilidad) {
        this.tablaHabilidad = tablaHabilidad;
    }




    public void setCurrentEmprendedor(Persona currentEmprendedor) {
        this.currentEmprendedor = currentEmprendedor;
    }

    public void setCurrentEmprendimiento(Emprendimiento currentEmprendimiento) {
        this.currentEmprendimiento = currentEmprendimiento;
    }

    public void setFiltroBusqueda(String filtroBusqueda) {
        this.filtroBusqueda = filtroBusqueda;
    }

    public void setListadoActual(List<Persona> listadoActual) {
        this.listadoActual = listadoActual;
    }

    public void setTablaEmprendedor(HtmlDataTable tablaEmprendedor) {
        this.tablaEmprendedor = tablaEmprendedor;
    }

    public String getAccionEmprendedor() {
        return accionEmprendedor;
    }

    public Boolean getRenderEmprendedor() {
        return renderEmprendedor;
    }

    public void setAccionEmprendedor(String accionEmprendedor) {
        this.accionEmprendedor = accionEmprendedor;
    }

    public void setRenderEmprendedor(Boolean renderEmprendedor) {
        this.renderEmprendedor = renderEmprendedor;
    }

    public List<Estudio> getListadoAEstudio() {
        return listadoAEstudio;
    }

    public void setListadoAEstudio(List<Estudio> listadoAEstudio) {
        this.listadoAEstudio = listadoAEstudio;
    }

    public List<Experiencia> getListadoAExperiencia() {
        return listadoAExperiencia;
    }

    public void setListadoAExperiencia(List<Experiencia> listadoAExperiencia) {
        this.listadoAExperiencia = listadoAExperiencia;
    }

    public Boolean getRenderPnExperiencia() {
        return renderPnExperiencia;
    }

    public void setRenderPnExperiencia(Boolean renderPnExperiencia) {
        this.renderPnExperiencia = renderPnExperiencia;
    }

    public Boolean getRenderPnEstudio() {
        return renderPnEstudio;
    }

    public void setRenderPnEstudio(Boolean renderPnEstudio) {
        this.renderPnEstudio = renderPnEstudio;
    }



    //######## Metodo para Cargos ##########
    
    public String grabarCargo(){
        if (this.accionCargo.equals("Ins")){
           this.currentEmprendimiento.addCargo(currentCargo);
        }
        
           this.renderCargo=false;
           return null;

       }

       public String cerrarCargo(){
           this.renderCargo=false;
           return null;

       }
       public String eliminarCargo(){
           currentCargo = (Cargo)tablaCargo.getRowData();
           this.currentEmprendimiento.removeCargo(currentCargo);
           return null;
       }
       public String editarCargo(){
            this.accionCargo="Mod";
                this.renderCargo=true;
		currentCargo = (Cargo)tablaCargo.getRowData();
		return null;
       }
       public String nuevoCargo(){
                this.accionCargo="Ins";
                this.renderCargo=true;
		currentCargo = new Cargo();
		return null;
       }

    public String getAccionCargo() {
        return accionCargo;
    }

    public void setAccionCargo(String accionCargo) {
        this.accionCargo = accionCargo;
    }

    public List<Cargo> getListadoACargo() {
        return listadoACargo;
    }

    public void setListadoACargo(List<Cargo> listadoACargo) {
        this.listadoACargo = listadoACargo;
    }

    public Boolean getRenderCargo() {
        return renderCargo;
    }

    public void setRenderCargo(Boolean renderCargo) {
        this.renderCargo = renderCargo;
    }

    public Boolean getRenderPnCargo() {
        return renderPnCargo;
    }

    public void setRenderPnCargo(Boolean renderPnCargo) {
        this.renderPnCargo = renderPnCargo;
    }

    public HtmlDataTable getTablaCargo() {
        return tablaCargo;
    }

    public void setTablaCargo(HtmlDataTable tablaCargo) {
        this.tablaCargo = tablaCargo;
    }

    public Cargo getCurrentCargo() {
        return currentCargo;
    }

    public void setCurrentCargo(Cargo currentCargo) {
        this.currentCargo = currentCargo;
    }

    public Cargo getCurrentCargoRelacion() {
        return currentCargoRelacion;
    }

    public void setCurrentCargoRelacion(Cargo currentCargoRelacion) {
        this.currentCargoRelacion = currentCargoRelacion;
    }








    //######################################

public void pasarParamatrosCargo(ActionEvent evento) {
        this.currentCargo.setDepende_de(this.currentCargoRelacion.getCodigo());
        GestorCargos gestorCargos = super.getBean("gestorBuscarCargos");
        gestorCargos.setCodigoEmprendimiento(this.currentEmprendimiento.getCodigo());
        gestorCargos.listar();
        gestorCargos.setCurrentCargo(currentCargoRelacion);
        gestorCargos.setReRender("pnlCargos");
        gestorCargos.setFocus("btnBuscar");
        gestorCargos.listar();
        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setOncomplete("Richfaces.showModalPanel('panelCargo')");
}


public void pasarParamatrosProfesion(ActionEvent evento) {
        Profesion profesion = currentEmprendedor.getProfesion();
        GestorProfesiones gestorProfesiones = super.getBean("gestorBuscarProfesiones");
        gestorProfesiones.setCurrentProfesion(profesion);
        gestorProfesiones.setReRender("panPersonas");
        gestorProfesiones.setFocus("btnBuscar");
        gestorProfesiones.listar();
        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setOncomplete("Richfaces.showModalPanel('panelProfesion')");
    }
//pasarParamatrosHabilidad

public void pasarParamatrosHabilidad(ActionEvent evento) {
        GestorHabilidades gestorHabilidades = super.getBean("gestorBuscarHabilidades");
        gestorHabilidades.setCurrentHabilidad(currentHabilidad);
        gestorHabilidades.setReRender("pnlHabilidades");
        gestorHabilidades.setFocus("btnBuscar");
        gestorHabilidades.listar();
        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setOncomplete("Richfaces.showModalPanel('panelBuscarHabilidad')");
    }


public void cambioHabilidad(ValueChangeEvent evento){
FacesContext contexto = FacesContext.getCurrentInstance();
this.currentHabilidad=(Habilidad)evento.getNewValue();
}





 public void validarRuc(FacesContext context,
             UIComponent componentToValidate, Object value)
     throws ValidatorException {

         String ruc = value.toString();
         int tamano=ruc.length();


         try {

         long convertruc = Long.valueOf(ruc);


     } catch (Exception e) {
         FacesMessage message = new FacesMessage("Ingresar valores numericos.");
         throw new ValidatorException(message);
     }

     if (tamano < 10) {
         FacesMessage message = new FacesMessage("Ingrese 10 digitos numericos.");

         throw new ValidatorException(message);
     }

         return;
     }


    public void pasarListaCargos(ActionEvent evento) {
    refrescarGrafica();

    }
    public void refrescarGrafica(){
        //Paso la lista a el gestor Organigrama
        GestorOrganigrama gestorOrganigrama = super.getBean("gestorOrganigrama");
        gestorOrganigrama.setListaCargos(this.currentEmprendimiento.getCargos());
        gestorOrganigrama.generarColaCargo();
    }

}
